#coding:utf8
import re
#正则表达式


#Date:2017/04/09
#author:顽强

'''
正则的概念:
	从字符串中匹配出你想要的内容,那么你想要的内容就是表达式
	例如:str1 = 'abc' ,pa = r'a' 你想要从str1中匹配出a,那么这变量pa就是你的正则表达式
	PS:这是一个简单的例子,其实正则表达式就是需要我们写出这个pa
'''

'''
正则的一些重要的表达式及含义:

特殊含义字符1(表达式):
	1..号 .号可以代表任意的一个字符\n换行符除外
	2.[ab] 匹配出中括号中的任意一个字符
	3.\d 表示任意一个数字,\D表示任意一个非数字
	4.\s 表示一个空白,\S表示一个非空白
	5.\w 表示任意一个字母或者数字符号,\W表示任意一个非字母,非数字的符号
	****注意,如果需要单独匹配.号和[]中括号,需要这样转义,\.,\[\]

特殊含义字符2(计数符号):
	1.*号,*号表示0个到无限个, 
		例如:\d* 就是代表0个数字到连续的n个数字都符合,匹配不到也可以,也有返回结果
	2.+号,+号表示1个到无限个, 
		例如:\d+ 就是代表1个数字到连续的n个数字都符合,必须要匹配到一个数字
	3.?号,?号表示0个到1个, 
		例如:\d? 就是代表0个数字到1个数字都符合,匹配不到也可以,也有返回结果
	4.{m} 代表连续的m个,{m,n} 代表连续的个数在m个到n个之间
		例如:\d{5},代表必须有连续的5个数字才有返回结果
		例如:\d{0,5},代表必须有连续的0个~5个数字才有返回结果
	5.*? 代表0个,+?代表一个,?? 代表0个
		多加一个?代表非贪婪模式,匹配越少越好

特殊含义字符3(边界符):
	1.^ 开头边界符
		例如: ^a 那么所匹配的字符串必须以a开头才有返回结果
	2.$ 结束边界符
		例如: @163.com$ 必须要以@163.com结束才有返回结果
	3./A 开头边界符 /Z 结束边界符

特殊含义字符4():
	1.| 左右任意一个表达式
		例如: a|b 代表a,b中的任意一个
	2.() 分组
		例如: (a)(b) 代表匹配完a在匹配b,匹配成功的化可以用groups()方法查看
	3.\number number是数字代表引用某个括号里的表达式(在同一个表达式内)
		str1 = '<book>python</book>'
		例如: re.match(r'<(\w+>)\w+</\1',str1) #这个\1就是(\w+>)
	4.(?P<name>) 定义表达式名 (?P=name)调用这个表达式
		str1 = '<book>python</book>'
		例如: re.match(r'<(?P<pa_name>\w+>)\w+</(?P=pa_name)',str1) #(?P=pa_name)就是(\w+>)
'''

'''
Python re模块的几个方法
	str1 = 'abcdefg'
	pa = re.compile(r'abc') #这是一个正则表达式实例,作用对象就是我们的表达式
	ma = pa.match(str1) 	#这是将表达式实例作用到字符串的一个方法
		****match 方法是从字符串第一个字符开始匹配,当第一个匹配失败将不会再往下匹配
		ma.group() #match将匹配结果存入ma.group()方法中
		ma.groups() #多个表达式用括号括起来的匹配结果 如:pas = re.compile(r'(a)(b)')

	re.search #匹配字符串,但是匹配到就结束了,查找数字,
		str1 = 'imooc videonum=1000'
		m = re.search(r'\d+',str1)
		m.group()

		str2 = 'c = 90, python = 80, java = 70'
		m = re.search(r'\d+',str2)

	re.findall #匹配字符串的全部
		info_list = re.findall(r'\d+',str2)
		sum1 = sum([int(x) x for x in info_list]) #顺便求和

	re.sub #替换,可以设置替换次数
		str2 = 'c = 90, python = 80, java = 70'
		str3 = re.sub(r'\d+','100',str2)

		2.还可以传入方法来替换
def add1(match):
	val = match.group()
	num = int(val)+1
	return str(num)
			s = re.sub(r'\d+',add1,str2)

	re.split #切割字符串,可以设置切割次数
		str2 = 'c = 90, python = 80, java = 70'
		m = re.split(r':| |,',str2)
'''

